package com.liuxing.strategy;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName StrategyFactory
 * @Description 策略工厂
 * @Author ymy
 * @Date 2021/5/21 15:05
 */
public class StrategyFactory {


    /**
     * 用于存储策略类，为什么使用HashMap而不用ConcurrentHashMap呢？
     * 那是因为它没有并发问题，所以不需要使用ConcurrentHashMap
     */
    private static final Map<Integer,IStrategy> strategy = new HashMap<Integer, IStrategy>();
    static{
        //国外   选择飞机
        strategy.put(1,new AircraftStrategyImpl());
        //国内--省外   选择高铁
        strategy.put(2,new SHRStrategyImpl());
        //国内--省内   选择火车
        strategy.put(3,new TrainStrategyImpl());
    }

    /**
      * @Description 饿汉式
     */
    public static IStrategy  getStrategy1(Integer type){
        if(type == null ){
            throw new IllegalArgumentException("请选择类型");
        }
        return strategy.get(type);
    }


    /**
      * @Description 懒汉式
     */
    public static IStrategy  getStrategy2(Integer type){
        if(type == null ){
            throw new IllegalArgumentException("请选择类型");
        }
        if(type == 1){
            //国外   选择飞机
            return new AircraftStrategyImpl();
        }else if(type == 2){
            //国内--省外   选择高铁
            return new SHRStrategyImpl();
        }else if(type == 3){
            //国内--省内   选择火车
            return new TrainStrategyImpl();
        }
        return null;
    }

}
